
'''
lambda只是一个表达式，函数体比def简单很多。

lambda的主体是一个表达式，而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。

lambda函数拥有自己的命名空间，且不能访问自有参数列表之外或全局命名空间里的参数。

通常是在需要一个函数，这个函数结构比较简单又不是会被重复的使用，我们就可以使用匿名函数

基本语法：

lambda 参数，参数1：参数+参数1

匿名函数   参数         ： 函数体返回值
'''

# def fun(x,y):
#     return x+y
# ret = fun(5,6)
# print(ret)

# ret = lambda x,y:x+y
#
# print(ret(5,6))

# def is_odd(n): #even
#     return n % 2 == 1

# tmplist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])# 返回的是一个迭代器对象
# newlist = list(tmplist)
# print(newlist)

# tmplist = filter(lambda n:n%2 == 1,[1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13])
# for i in tmplist:
#     print(i)

lst = [1, 2, 3]
# print (lis.__next__)
# 想要让列表中的每一项都乘10 - 2
lis1 = map(lambda n:n*10-2,lst)#返回的是一个迭代器对象

# print (next (lis1))
# print (next (lis1))
# print (next (lis1))
# print (list (lis1))

# print(dir(lis1))
# print (list (lis1))
# print (lis1.__next__ ())
# print (lis1.__next__ ())
# print (lis1.__next__ ())
# for i in lis1:
#     print(i)
# print (list (lis1))#把一个迭代器转换成列表
from functools import reduce
list2 = [ i for i in range(1,10)] #5050
ret=  reduce(lambda x,y:x*y,list2)
print (ret)
